import requests

from operator import itemgetter

# 执行API调用并存储响应
url = 'https://hacker-news.firebaseio.com/v0/topstories.json'
r = requests.get(url)
print("Status code:", r.status_code)

# 处理有关每篇文章的信息
# API调用返回一个列表，其中包含Hacker News上当前最热门的500篇文章的ID
submission_ids = r.json() # 将API响应转换为Python列表，并将其存储在submission_ids中
submission_dicts = []
# 用这些ID来创建一些系列字典，其中每个字典都存储了一篇文章的信息
# 只调查Top5
for submission_id in submission_ids[:5]:
    # 对于每篇文章，都执行一个API调用
    # 其中的url包含submission_id的当前值
    url = ('https://hacker-news.firebaseio.com/v0/item/' +
           str(submission_id) + '.json')
    submission_r = requests.get(url)
    # 以便知道每次请求是否成功
    print(submission_r.status_code)
    response_dict = submission_r.json()

    # 为当前处理的文章创建一个字典
    submission_dict = {
        'title': response_dict['title'],    # 文章标题
        # 到其讨论页面的链接
        'link': 'http://news.ycombinator.com/item?id=' + str(submission_id),
        # 评论数（如果文章还没有评论，响应字典中奖没有键'descendants'）
        # 不确定某个键是否包含在字典中时，可使用方法dict.get()
        # 它在指定的键存在时返回与之相关联的值，并在指定的键不存在时返回你指定的值（这里是0）
        'comments': response_dict.get('descendants', 0)
    }
    submission_dicts.append(submission_dict)

# 根据评论数递降排序，即评论最多的文章位于最前面
submission_dicts = sorted(submission_dicts, key = itemgetter('comments'),
                          reverse = True)

# 遍历整个列表，打印其中三条信息
for submission_dict in submission_dicts:
    print("\n标题:", submission_dict['title'])
    print("到讨论页面的链接:", submission_dict['link'])
    print("文章现有的评论数:", submission_dict['comments'])